using System;
using System.Collections.Generic;
using System.Text;

namespace PhoneNetwork.AntColony
{
    public class AntSystem
    {
    //    double AntProduct(int from, int to)
    //    {
    //        return ((pow(_pheromone[from][to], ALPHA) * pow((1.0 / _distance[from][to]), BETA)));
    //    }


    //    //-------------------------------------------------------------------
    //    // Select Next City
    //    //------------------------------------------------------------------
    //    int GetNextCity(int ant)
    //    {
    //        int from, to;
    //        double denom = 0.0;

    //        // Choose the next city to visit 
    //        from = _ants[ant].currentCity;

    //        //Work out denominator of formula
    //        for (to = 0; to < MAX_CITIES; to++)
    //        {
    //            if (_ants[ant].visitedCities[to] == 0)
    //            {
    //                denom += AntProduct(from, to);
    //            }
    //        }

    //        do
    //        {

    //            double p;

    //            to++;
    //            if (to >= MAX_CITIES) to = 0;
    //            if (_ants[ant].visitedCities[to] == 0)
    //            {

    //                p = AntProduct(from, to) / denom;
    //                if (RandomFloat() < p)
    //                    break;
    //            }

    //        } while (1);
    //        return to;
    //    }


    //    //-------------------------------------------------------------------
    //    //SimulateAnts
    //    //------------------------------------------------------------------

    //    int SimulateAnts()
    //    {
    //        int k;
    //        int moving = 0;

    //        for (k = 0; k < MAX_ANTS; k++)
    //        {

    //            /* Ensure this ant still has _cities to visit */
    //            if (_ants[k].pathIndex < MAX_CITIES)
    //            {

    //                _ants[k].nextCity = GetNextCity(k);
    //                _ants[k].visitedCities[_ants[k].nextCity] = 1;
    //                _ants[k].path[_ants[k].pathIndex++] = _ants[k].nextCity;
    //                _ants[k].tourLength += _distance[_ants[k].currentCity][_ants[k].nextCity];

    //                /* Handle the final case (last city to first) */
    //                if (_ants[k].pathIndex == MAX_CITIES)
    //                {
    //                    _ants[k].tourLength +=
    //                        _distance[_ants[k].path[MAX_CITIES - 1]][_ants[k].path[0]];
    //                }

    //                _ants[k].currentCity = _ants[k].nextCity;
    //                moving++;
    //            }

    //        }

    //        return moving;
    //    }


    //    //-------------------------------------------------------------------
    //    //UpdateTrails
    //    //------------------------------------------------------------------

    //    void UpdateTrails()
    //    {
    //        int from, to, i, ant;

    //        /* _pheromone Evaporation */
    //        for (from = 0; from < MAX_CITIES; from++)
    //        {

    //            for (to = 0; to < MAX_CITIES; to++)
    //            {

    //                if (from != to)
    //                {

    //                    _pheromone[from][to] *= (1.0 - RHO);

    //                    if (_pheromone[from][to] < 0.0) _pheromone[from][to] = 0;

    //                }

    //            }

    //        }

    //        // Add new _pheromone to the trails

    //        // Look at the tours of each ant
    //        for (ant = 0; ant < MAX_ANTS; ant++)
    //        {

    //            // Update each leg of the tour given the tour length
    //            for (i = 0; i < MAX_CITIES; i++)
    //            {

    //                if (i < MAX_CITIES - 1)
    //                {
    //                    from = _ants[ant].path[i];
    //                    to = _ants[ant].path[i + 1];
    //                }
    //                else
    //                {
    //                    from = _ants[ant].path[i];
    //                    to = _ants[ant].path[0];
    //                }

    //                _pheromone[from][to] += (QVAL / _ants[ant].tourLength);
    //                _pheromone[to][from] = _pheromone[from][to];

    //            }

    //        }

    //        for (from = 0; from < MAX_CITIES; from++)
    //        {
    //            for (to = 0; to < MAX_CITIES; to++)
    //            {
    //                _pheromone[from][to] *= RHO;
    //            }
    //        }

    //    }
    }
}
